format binary
use64
org 0x400000
;-------------------------------------------------------------------------------
; DESC:         ELF header.
;-------------------------------------------------------------------------------
                db          0x7f,'ELF',2,1,1,0,0,0,0,0,0,0,0,0
                dw          2
                dw          62
                dd          1
                dq          _start
                dq          64
                dq          0
                dd          0
                dw          64
                dw          56
                dw          3
                dw          64
                dw          0
                dw          0
                dd          3
                dd          4
                dq          ELF_interp-0x400000
                dq          ELF_interp,ELF_interp
                dq          ELF_interp.SIZE,ELF_interp.SIZE
                dq          1
                dd          2
                dd          4
                dq          ELF_dynamic-0x400000
                dq          ELF_dynamic,ELF_dynamic
                dq          ELF_dynamic.SIZE,ELF_dynamic.SIZE
                dq          8
                dd          1
                dd          7
                dq          0
                dq          0x400000,0x400000
                dq          ELF_SIZE,ELF_SIZE
                dq          0x100000
;-------------------------------------------------------------------------------
; NAME:         main
; DESC:         Program main function.
;-------------------------------------------------------------------------------
align 16
main:
                push        rbp
                mov         rbp,rsp
                ; ...
                mov         rsp,rbp
                pop         rbp
                ret
;-------------------------------------------------------------------------------
; NAME:         _start
; DESC:         Program entry point.
;-------------------------------------------------------------------------------
_start:
                call        main
                mov         eax,60
                xor         edi,edi
                syscall                             ; terminate process
;-------------------------------------------------------------------------------
align 8
dlopen          dq          0
dlsym           dq          0
;-------------------------------------------------------------------------------
align 8
ELF_dynamic:
                dq          1,ELF_strtab.libdl-ELF_strtab
                dq          5,ELF_strtab
                dq          6,ELF_symtab
                dq          10,ELF_strtab.SIZE
                dq          11,24
                dq          7,ELF_rela
                dq          8,ELF_rela.SIZE
                dq          9,24
                dq          0,0
.SIZE=$-ELF_dynamic

ELF_strtab:
                db          0
.libdl          db          'libdl.so.2',0
.dlopen         db          'dlopen',0
.dlsym          db          'dlsym',0
.SIZE=$-ELF_strtab

align 4
ELF_symtab:
                dd          ELF_strtab.dlopen-ELF_strtab
                db          (1 shl 4)+2,0
                dw          0
                dq          0,0
                dd          ELF_strtab.dlsym-ELF_strtab
                db          (1 shl 4)+2,0
                dw          0
                dq          0,0
.SIZE=$-ELF_symtab

align 8
ELF_rela:
                dq          dlopen,(0 shl 32)+1,0
                dq          dlsym,(1 shl 32)+1,0
.SIZE=$-ELF_rela

ELF_interp      db          '/lib/ld-linux-x86-64.so.2',0
.SIZE=$-ELF_interp

ELF_SIZE=$-$$
;-------------------------------------------------------------------------------
